package raft

import (
	"log"
	"os"
)

// -------------------------------------------------------------
// 
// /变量
// 
// -------------------------------------------------------------

const (
	Debug = 1
	Trace = 2
)

var logLevel int = 0
var logger *log.Logger

func init() {
	logger = log.New(os.Stdout, "[raft]", log.Lmicroseconds)
}

// -------------------------------------------------------------
// 
// 函数
// 
// -----------------------------------------------------------------------------------------

func LogLevel() int {
	return logLevel
}

func SetLogLevel(level int) {
	logLevel = level
}

// ---------------------------------------
// 警告
// ---------------------------------------

// 按标准打印记录器。参数的处理方式为
// fmt。打印
func warn(v ...interface{}) {
	logger.Print(v...)
}

// 打印到标准记录器。参数的处理方式为
// fmt。Printf。
func warnf(format string, v ...interface{}) {
	logger.Printf(format, v...)
}

// 打印到标准记录器。参数的处理方式为
// fmt。普林顿。
func warnln(v ...interface{}) {
	logger.Println(v...)
}

// /---------------------------------------
// 基本调试
// /---------------------------------------

// 如果启用调试模式，则打印到标准记录器。参数
// 以fmt的方式处理。打印
func debug(v ...interface{}) {
	if logLevel >= Debug {
		logger.Print(v...)
	}
}

// 如果启用调试模式，则打印到标准记录器。参数
// 以fmt的方式处理。Printf。
func debugf(format string, v ...interface{}) {
	if logLevel >= Debug {
		logger.Printf(format, v...)
	}
}

// 如果启用调试模式，则打印到标准记录器。参数
// 以fmt的方式处理。普林顿。
func debugln(v ...interface{}) {
	if logLevel >= Debug {
		logger.Println(v...)
	}
}

// /---------------------------------------
// 跟踪级调试
// /---------------------------------------

// 如果启用跟踪调试，则打印到标准记录器。参数
// 以fmt的方式处理。打印
func trace(v ...interface{}) {
	if logLevel >= Trace {
		logger.Print(v...)
	}
}

// 如果启用跟踪调试，则打印到标准记录器。参数
// 以fmt的方式处理。Printf。
func tracef(format string, v ...interface{}) {
	if logLevel >= Trace {
		logger.Printf(format, v...)
	}
}

// 如果启用跟踪调试，则打印到标准记录器。参数
// 以debugln的方式处理。
func traceln(v ...interface{}) {
	if logLevel >= Trace {
		logger.Println(v...)
	}
}
